package DyingBaby.demo;

import DyingBaby.backend.common.CacheConfig;
import DyingBaby.backend.dm.pageCache.PageCache;
import DyingBaby.backend.dm.pageCache.PageCacheImpl;
import java.io.File;

/**
 * 缓存配置功能演示程序
 */
public class CacheConfigDemo {
    
    public static void main(String[] args) {
        try {
            // 创建临时测试文件
            File testFile = File.createTempFile("cache_config_demo", ".db");
            testFile.deleteOnExit();
            
            // 先删除可能存在的文件
            if (testFile.exists()) {
                testFile.delete();
            }
            
            System.out.println("=== 缓存配置功能演示 ===");
            
            // 演示1: 默认配置
            System.out.println("\n1. 默认配置演示:");
            System.out.println(CacheConfig.getConfigInfo());
            
            // 创建页面缓存
            PageCacheImpl pageCache = PageCache.create(testFile.getAbsolutePath().replace(".db", ""), 80 * 1024);
            
            // 进行一些操作
            int page1 = pageCache.newPage("Page 1 data".getBytes());
            int page2 = pageCache.newPage("Page 2 data".getBytes());
            pageCache.getPage(page1);
            pageCache.getPage(page2);
            
            System.out.println("操作完成，当前统计: " + pageCache.getCacheStats());
            
            // 演示2: 关闭日志记录
            System.out.println("\n2. 关闭日志记录演示:");
            CacheConfig.setLoggingEnabled(false);
            System.out.println(CacheConfig.getConfigInfo());
            
            pageCache.getPage(page1);
            System.out.println("日志关闭后访问页面，统计: " + pageCache.getCacheStats());
            
            // 演示3: 关闭统计功能
            System.out.println("\n3. 关闭统计功能演示:");
            CacheConfig.setStatsEnabled(false);
            System.out.println(CacheConfig.getConfigInfo());
            
            pageCache.getPage(page2);
            System.out.println("统计关闭后访问页面，统计: " + pageCache.getCacheStats());
            
            // 演示4: 启用自动打印
            System.out.println("\n4. 启用自动打印演示:");
            CacheConfig.setStatsEnabled(true);
            CacheConfig.setAutoPrintEnabled(true);
            System.out.println(CacheConfig.getConfigInfo());
            
            int page3 = pageCache.newPage("Page 3 data".getBytes());
            pageCache.getPage(page3); // 这里会自动打印统计信息
            
            // 演示5: 系统属性配置
            System.out.println("\n5. 系统属性配置演示:");
            System.out.println("可以通过以下系统属性控制缓存行为:");
            System.out.println("  -Dmydb.cache.stats=true/false     (控制统计功能)");
            System.out.println("  -Dmydb.cache.logging=true/false   (控制日志记录)");
            System.out.println("  -Dmydb.cache.autoPrint=true/false (控制自动打印)");
            
            // 演示6: 批量配置
            System.out.println("\n6. 批量配置演示:");
            CacheConfig.setConfig(false, false, false);
            System.out.println("全部关闭: " + CacheConfig.getConfigInfo());
            
            CacheConfig.setConfig(true, true, true);
            System.out.println("全部开启: " + CacheConfig.getConfigInfo());
            
            // 演示7: 重置配置
            System.out.println("\n7. 重置配置演示:");
            CacheConfig.resetToDefaults();
            System.out.println("重置后: " + CacheConfig.getConfigInfo());
            
            pageCache.close();
            
            System.out.println("\n=== 演示完成 ===");
            System.out.println("现在您可以通过配置选项控制缓存统计和日志的显示！");
            
        } catch (Exception e) {
            System.err.println("演示失败: " + e.getMessage());
            e.printStackTrace();
        }
    }
}
